﻿using PersistenceLayer.DAL;
using PersistenceLayer.Model;
using SupportLayer.Constantes.OUTROS;
using SupportLayer.Constantes.PRODUTO;
using SupportLayer.Enums;
using SupportLayer.Objetos.Produto;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ByBikeShop.Administracao.Pages
{
	public partial class EspecificacoesProduto : BaseAdmin
	{
		UCs.Mensagem.mensagens ucMensagem;

		public Int64 GetProdutoID
		{
			get
			{
				if ((Request.QueryString[OUTROS.PRODUTO_ID] == null) || (Request.QueryString[OUTROS.PRODUTO_ID].ToString() == ""))
				{
					return 0;
				}

				return Convert.ToInt64(Request.QueryString[OUTROS.PRODUTO_ID].ToString());
			}
		}
		public Int64 GetEspecificacaoID
		{
			get
			{
				if ((Request.QueryString[OUTROS.ESPECIFICACAO_ID] == null) || (Request.QueryString[OUTROS.ESPECIFICACAO_ID].ToString() == ""))
					return 0;

				return Convert.ToInt64(Request.QueryString[OUTROS.ESPECIFICACAO_ID].ToString());
			}
		}
		public Acao GetAction
		{
			get
			{
				try
				{
					if ((Request.QueryString[OUTROS.ACAO] == null) || (Request.QueryString[OUTROS.ACAO].ToString() == ""))
						return Acao.VER;

					return (Acao)(Convert.ToInt32(Request.QueryString[OUTROS.ACAO].ToString()));
				}
				catch (Exception)
				{
					return Acao.VER;
				}
			}
		}

		protected void Page_Load(object sender, EventArgs e)
		{
			if (GetEspecificacaoID == 0)
			{
				btnSalvar.Visible = false;
				btnCancelar.Visible = false;
				btnInserir.Visible = true;
			}
			else if (GetEspecificacaoID > 0)
			{
				btnInserir.Visible = false;
				btnSalvar.Visible = true;
				btnCancelar.Visible = true;
			}
			else
			{
				btnSalvar.Visible = false;
				btnInserir.Visible = false;
				btnCancelar.Visible = true;
			}

			base.PageLoad(true);
		}
		public override void CarregaDados()
		{
			if (IsPostBack)
				return;

			if (GetEspecificacaoID <= 0)
				return;

			Produto_Especificacao pe = new Produto_EspecificacaoDAL().Obter(GetEspecificacaoID);

			lblID.Text = pe.ID.ToString();
			txtCor.Text = pe.Cor;
			txtQuantidade.Text = pe.Quantidade.ToString();
			txtCodigoProduto.Text = pe.CodigoLoja;
			txtTamanho.Text = pe.Tamanho;
			txtObservacao.Text = pe.Observacao;
		}
		public override void CarregaGrid()
		{
		}
		public override void PopulaGrid()
		{
			try
			{
				DataTable dt = new DataTable();

				dt.Columns.Add("ID");
				dt.Columns.Add("CodigoLoja");
				dt.Columns.Add("Cor");
				dt.Columns.Add("Tamanho");
				dt.Columns.Add("Quantidade");
				dt.Columns.Add("Observacao");
				dt.Columns.Add("Ativo");

				var lstEspecificacoes = new Produto_EspecificacaoDAL().ListarPorProduto(GetProdutoID);

				if (lstEspecificacoes == null)
					return;

				foreach (Produto_Especificacao e in lstEspecificacoes)
					dt.Rows.Add(e.ID, e.CodigoLoja, e.Cor,
						e.Tamanho, e.Quantidade, e.Observacao, e.Ativo ? "1" : "0");

				grdEspecificacoes.DataSource = dt;
				grdEspecificacoes.DataBind();
			}
			catch (Exception ex)
			{
				ucMensagem = (UCs.Mensagem.mensagens)LoadControl(ResolveUrl("/Administracao/UCs/Mensagem/mensagens.ascx"));
				ucMensagem.TipoMensagem = TiposMensagens.Erro;
				ucMensagem.Mensagem = ex.Message;
				placeMensagem.Controls.Add(ucMensagem);
			}
		}

		protected void grdEspecificacoes_RowDataBound(object sender, GridViewRowEventArgs e)
		{
			if (e.Row.RowType == DataControlRowType.DataRow)
			{
				ImageButton btnAtivo = (ImageButton)e.Row.FindControl("btnAtivar");

				HiddenField hdfAtivo = ((HiddenField)e.Row.FindControl("hdfAtivo"));

				if (hdfAtivo.Value == "1")
					btnAtivo.ImageUrl = "/Imagens/Icones/ativo.png";
				else
					btnAtivo.ImageUrl = "/Imagens/Icones/inativo.png";
			}
		}

		protected void btnInserir_Click(object sender, EventArgs e)
		{
			try
			{
				if (txtCor.Text.Equals(string.Empty))
					throw new ApplicationException("O campo COR deve ser preenchido!");

				if (txtQuantidade.Text.Equals(string.Empty))
					throw new ApplicationException("O campo QUANTIDADE deve ser preenchido!");

				if (txtCodigoProduto.Text.Equals(string.Empty))
					throw new ApplicationException("O campo CÓDIGO DO PRODUTO deve ser preenchido!");

				if (txtTamanho.Text.Equals(string.Empty))
					throw new ApplicationException("O campo TAMANHO deve ser preenchido!");

				int qtd = 0;

				if (!int.TryParse(txtQuantidade.Text, out qtd))
					throw new ApplicationException("O campo QUANTIDADE aceita apenas números!");

				if (qtd == 0)
					throw new ApplicationException("Digite uma QUANTIDADE maior que 0!");

				Produto_Especificacao pe = new Produto_Especificacao();
				pe.CodigoLoja = txtCodigoProduto.Text;
				pe.Cor = txtCor.Text;
				pe.Observacao = txtObservacao.Text;
				pe.Produto_ID = GetProdutoID;
				pe.Quantidade = qtd;
				pe.Tamanho = txtTamanho.Text;

				var ped = new Produto_EspecificacaoDAL();

				if (ped.ExisteCodigo(pe.CodigoLoja))
					throw new ApplicationException("O código já existe!");

				pe.ID = ped.Adicionar(pe);

				Response.Redirect("/Administracao/Pages/EspecificacoesProduto.aspx?" +
					OUTROS.ACAO + "=" + (int)Acao.ADICIONAR + "&" +
					OUTROS.PRODUTO_ID + "=" + GetProdutoID.ToString());
			}
			catch (Exception ex)
			{
				ucMensagem = (UCs.Mensagem.mensagens)LoadControl(ResolveUrl("/Administracao/UCs/Mensagem/mensagens.ascx"));
				ucMensagem.TipoMensagem = TiposMensagens.Erro;
				ucMensagem.Mensagem = ex.Message;
				placeMensagem.Controls.Add(ucMensagem);
			}
		}
		protected void btnSalvar_Click(object sender, EventArgs e)
		{
			try
			{
				if (txtCor.Text.Equals(string.Empty))
					throw new ApplicationException("O campo COR deve ser preenchido!");

				if (txtQuantidade.Text.Equals(string.Empty))
					throw new ApplicationException("O campo QUANTIDADE deve ser preenchido!");

				if (txtCodigoProduto.Text.Equals(string.Empty))
					throw new ApplicationException("O campo CÓDIGO DO PRODUTO deve ser preenchido!");

				if (txtTamanho.Text.Equals(string.Empty))
					throw new ApplicationException("O campo TAMANHO deve ser preenchido!");

				int qtd = 0;

				if (!int.TryParse(txtQuantidade.Text, out qtd))
					throw new ApplicationException("O campo QUANTIDADE aceita apenas números!");

				if (qtd <= 0)
					throw new ApplicationException("Digite uma QUANTIDADE maior que 0!");

				var ped = new Produto_EspecificacaoDAL();

				Produto_Especificacao pe = ped.Obter(GetEspecificacaoID);

				if (pe.CodigoLoja != txtCodigoProduto.Text)
				{
					if (ped.ExisteCodigo(txtCodigoProduto.Text))
						throw new ApplicationException("O código digitado já existe!");

					pe.CodigoLoja = txtCodigoProduto.Text;
				}

				pe.ID = GetEspecificacaoID;
				pe.Observacao = txtObservacao.Text;
				pe.Produto_ID = GetProdutoID;
				pe.Quantidade = qtd;

				if (pe.Cor != txtCor.Text)
				{
					if (pe.Tamanho != txtTamanho.Text)
					{
						if (ped.ExisteEspecificacao(txtCor.Text, txtTamanho.Text, pe.ID))
							throw new ApplicationException("Essa especificação já existe!");
					}
					else
					{
						if (ped.ExisteEspecificacao(txtCor.Text, pe.Tamanho, pe.ID))
							throw new ApplicationException("Essa especificação já existe!");
					}

				}
				else if (pe.Tamanho != txtTamanho.Text)
				{
					if (ped.ExisteEspecificacao(pe.Cor, txtTamanho.Text, pe.ID))
						throw new ApplicationException("Essa especificação já existe!");

				}

				pe.Cor = txtCor.Text;
				pe.Tamanho = txtTamanho.Text;

				ped.Atualizar(pe);
				PopulaGrid();

				ucMensagem = (UCs.Mensagem.mensagens)LoadControl(ResolveUrl("/Administracao/UCs/Mensagem/mensagens.ascx"));
				ucMensagem.TipoMensagem = TiposMensagens.Sucesso;
				ucMensagem.Mensagem = "Registro atualizado com sucesso!";
				placeMensagem.Controls.Add(ucMensagem);
			}
			catch (Exception ex)
			{
				ucMensagem = (UCs.Mensagem.mensagens)LoadControl(ResolveUrl("/Administracao/UCs/Mensagem/mensagens.ascx"));
				ucMensagem.TipoMensagem = TiposMensagens.Erro;
				ucMensagem.Mensagem = ex.Message;
				placeMensagem.Controls.Add(ucMensagem);
			}
		}
		protected void btnCancelar_Click(object sender, EventArgs e)
		{
			Response.Redirect("/Administracao/Pages/EspecificacoesProduto.aspx?" + OUTROS.ACAO + "=" + (int)Acao.ADICIONAR + "&" + OUTROS.PRODUTO_ID + "=" + GetProdutoID.ToString());
		}

		protected void btnEditar_Command(object sender, CommandEventArgs e)
		{
			Response.Redirect
			(
				string.Format("EspecificacoesProduto.aspx?{0}={1}&{2}={3}&{4}={5}",
					OUTROS.ACAO, (int)Acao.EDITAR, OUTROS.PRODUTO_ID, GetProdutoID, OUTROS.ESPECIFICACAO_ID, e.CommandArgument.ToString())
			);
		}

		protected void btnAtivar_Command(object sender, CommandEventArgs e)
		{
			new Produto_EspecificacaoDAL().AtivarDesativar(Convert.ToInt32(e.CommandArgument));
			Response.Redirect(Request.RawUrl);
		}

	}
}